[アップデート] AWS Database Migration Service (AWS DMS) の変換ルールでデータマスキング機能が使えるようになりました

[アップデート] AWS Database Migration Service (AWS DMS) の変換ルールでデータマスキング機能が使えるようになりました

Clock Icon2024.11.29

いわさです。

少し前のアップデートになりますが、AWS DMS がデータマスキングをサポートするようになりました。

https://aws.amazon.com/jp/about-aws/whats-new/2024/11/aws-dms-data-masking/

DMS を使うと同種・多種のデータベース間でのデータ移行を行うことができるのですが、その際に対象を絞ったり、変換を行う「タスク」という機能を使います。
データ型や小文字/大文字の変換だったりいくつか変換ルールがあるのですが、今回のアップデートで「数字のマスキング」「数字のランダム化」「ハッシュマスキング」の 3 つが追加されています。

アナウンスでは GDPR 準拠に役立つなど記載がありますが、本番環境から秘匿情報をマスキングしつつデータを別環境に再構築したい場合あると思うのですがそういう時に役立ちそうだと個人的には思いました。

やってみた

今回は一番簡単な、RDS for MySQL の同種移行を行います。
適当なインスタンスを 2 つ作成し DMS でソース/ターゲットのエンドポイントとして登録しました。

1B9C9973-4A8F-4317-82D1-8965AB065857.png

ソースデータベース上に適当なテーブルとレコードを作成しておきました。
個人情報(名前、メールアドレス、生年月日、電話番号、住所)と金銭的な情報(クレジットスコア、年収、口座残高)っぽいものが含まれていそうなサンプルデータを作りました。

mysql> use hogedb;
Database changed
mysql> CREATE TABLE customers (cu
    ->     id INT AUTO_INCREMENT PRIMARY KEY,
    ->     first_name VARCHAR(50) NOT NULL,
    ->     last_name VARCHAR(50) NOT NULL,
    ->     email VARCHAR(100) UNIQUE NOT NULL,
    ->     birth_date DATE,
    ->     phone_number VARCHAR(20),
    ->     address VARCHAR(200),
    ->     credit_score INT,
    ->     annual_income DECIMAL(10, 2),
    ->     account_balance DECIMAL(10, 2),
    ->     last_purchase_date DATE
    -> );
Query OK, 0 rows affected (0.07 sec)

mysql> INSERT INTO customers (first_name, last_name, email, birth_date, phone_number, address, credit_score, annual_income, account_balance, last_purchase_date)
    -> VALUES 
    ->     ('John', 'Doe', '[email protected]', '1985-03-15', '123-456-7890', '123 Main St, Anytown, USA', 720, 75000.00, 5000.50, '2023-05-01'),
    ->     ('Jane', 'Smith', '[email protected]', '1990-07-22', '987-654-3210', '456 Elm St, Othertown, USA', 680, 65000.00, 3500.75, '2023-04-15'),
    ->     ('Michael', 'Johnson', '[email protected]', '1978-11-30', '555-123-4567', '789 Oak Ave, Somewhere, USA', 750, 90000.00, 10000.00, '2023-05-10'),
    ->     ('Emily', 'Brown', '[email protected]', '1995-02-08', '444-555-6666', '321 Pine Rd, Anywhere, USA', 700, 55000.00, 2000.25, '2023-03-28'),
    ->     ('David', 'Wilson', '[email protected]', '1982-09-03', '777-888-9999', '654 Cedar Ln, Nowhere, USA', 730, 80000.00, 7500.80, '2023-05-05');
Query OK, 5 rows affected (0.04 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> select * from customers;
+----+------------+-----------+-----------------------------+------------+--------------+-----------------------------+--------------+---------------+-----------------+--------------------+
| id | first_name | last_name | email                       | birth_date | phone_number | address                     | credit_score | annual_income | account_balance | last_purchase_date |
+----+------------+-----------+-----------------------------+------------+--------------+-----------------------------+--------------+---------------+-----------------+--------------------+
|  1 | John       | Doe       | [email protected]        | 1985-03-15 | 123-456-7890 | 123 Main St, Anytown, USA   |          720 |      75000.00 |         5000.50 | 2023-05-01         |
|  2 | Jane       | Smith     | [email protected]      | 1990-07-22 | 987-654-3210 | 456 Elm St, Othertown, USA  |          680 |      65000.00 |         3500.75 | 2023-04-15         |
|  3 | Michael    | Johnson   | [email protected] | 1978-11-30 | 555-123-4567 | 789 Oak Ave, Somewhere, USA |          750 |      90000.00 |        10000.00 | 2023-05-10         |
|  4 | Emily      | Brown     | [email protected]     | 1995-02-08 | 444-555-6666 | 321 Pine Rd, Anywhere, USA  |          700 |      55000.00 |         2000.25 | 2023-03-28         |
|  5 | David      | Wilson    | [email protected]    | 1982-09-03 | 777-888-9999 | 654 Cedar Ln, Nowhere, USA  |          730 |      80000.00 |         7500.80 | 2023-05-05         |
+----+------------+-----------+-----------------------------+------------+--------------+-----------------------------+--------------+---------------+-----------------+--------------------+
5 rows in set (0.05 sec)

今回の変換タスクではサポートされている列に少し制約があるのでお試しの際は公式ドキュメントの制限事項(特に型)を気にするようにしてください。

https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Masking.html

今回のアップデートはデータ移行タスク内の変換ルールで指定することが出来ます。
ということでまずはデータ移行タスクを作成していきましょう。

ECDB48BB-C379-4A3F-BE77-0709EE8ABBAA.png

注意点が一つありまして、レプリケーションインスタンスのバージョンに気をつける必要があります。
今回の機能を使うためにはバージョン 3.5.4 以降である必要がありまして、本日時点だとデフォルトでインスタンス作成すると 3.5.2 あたりになるかなと思います。

3.5.3 以前だと次のように変換ルールの選択肢にデータマスキングが存在しないことがわかります。

D1F52161-E2B9-429C-B9B8-C5B865957B25.png

ということでデータマスキング変換ルールを使いたい方は 3.5.4 以降にアップデートしましょう。
データインスタンスの変更からバージョン変更出来ます。

4608F33E-15AB-45EC-B26F-B5B8B72C0F4D.png

アップデート後、データマスキングルールが選択できるようになっていることが確認出来ました。

06175AE7-980F-43AC-A41C-E4EF1BFDC7D9.png

あとは対象のスキーマ、テーブル、カラムを任意でフィルターしてルールの指定すれば OK です。
今回は hogedb スキーマの customers テーブルを指定し、ワイルドカードを使って%_nameという列を指定してみました。

7C1B7264-4880-463A-BA89-3DA1A6E80EB8.png

移行タスクが完了したので、ターゲットデータベースのレコードを確認してみましょう。

CEE0C8DA-4C02-463F-B901-8D7ECE3313B2_4_5005_c.jpeg

mysql> select * from customers;
+----+----------------------------------------------------+----------------------------------------------------+-----------------------------+------------+--------------+-----------------------------+--------------+---------------+-----------------+--------------------+
| id | first_name                                         | last_name                                          | email                       | birth_date | phone_number | address                     | credit_score | annual_income | account_balance | last_purchase_date |
+----+----------------------------------------------------+----------------------------------------------------+-----------------------------+------------+--------------+-----------------------------+--------------+---------------+-----------------+--------------------+
|  1 | A8CFCD74832004951B4408CDB0A5DBCD8C7E52D43F7FE244BF | FD53EF835B15485572A6E82CF470DCB41FD218AE5751AB7531 | [email protected]        | 1985-03-15 | 123-456-7890 | 123 Main St, Anytown, USA   |          720 |      75000.00 |         5000.50 | 2023-05-01         |
|  2 | 4F23798D92708359B734A18172C9C864F1D48044A754115A0D | 9F542590100424C92A6AE40860F7017AC5DFBCFF3CB49B36EA | [email protected]      | 1990-07-22 | 987-654-3210 | 456 Elm St, Othertown, USA  |          680 |      65000.00 |         3500.75 | 2023-04-15         |
|  3 | F089EAEF57ABA315BC0E1455985C0C8E40C247F073CE1F4C5A | 3013B18F4387BBE12CDB6D3BA9AA45A36ADCE32485DA62113F | [email protected] | 1978-11-30 | 555-123-4567 | 789 Oak Ave, Somewhere, USA |          750 |      90000.00 |        10000.00 | 2023-05-10         |
|  4 | 048A2730D09826F3EA1008AF47BD8F1209C0EEB3A3A2EF7D25 | 18F285592896EC8EAD1B69D90EE4080300BA8DC31665A6AD97 | [email protected]     | 1995-02-08 | 444-555-6666 | 321 Pine Rd, Anywhere, USA  |          700 |      55000.00 |         2000.25 | 2023-03-28         |
|  5 | A6B54C20A7B96EEAC1A911E6DA3124A560FE6DC042EBF270E3 | FB7961D139E4DA12AF18C24571A166FB77C391A15ABBF24D6C | [email protected]    | 1982-09-03 | 777-888-9999 | 654 Cedar Ln, Nowhere, USA  |          730 |      80000.00 |         7500.80 | 2023-05-05         |
+----+----------------------------------------------------+----------------------------------------------------+-----------------------------+------------+--------------+-----------------------------+--------------+---------------+-----------------+--------------------+
5 rows in set (0.03 sec)

first_namelast_nameがハッシュ化されていることが確認出来ますね。成功です。

さいごに

本日は AWS Database Migration Service (AWS DMS) の変換ルールでデータマスキング機能が使えるようになったので試してみました。

過去に本番 DB からマスキングしてデータ抽出するようなプログラムを作ったことがあったので、DMS でルールをちょちょっと定義して簡単にできるのは非常に良いですね。
今回は試してないですが、サーバーレスのほうもこのルールサポートされてるみたいなので、ぜひ DMS 使ってみてください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.